The present invention relates in general to graphics processors, for example as may be found in a personal computer, and in particular to systems and methods for executing an application that includes physics computations using multiple networked computers.
Graphics processing is an important feature of modern high-performance computing systems. Mathematical procedures are implemented to render (draw) graphic primitives such as triangles on a display to produce desired visual images. Real time animation is based on the high-speed processing of graphic primitives to produce visually accurate moving images, e.g., in video games or the like.
Graphics processing is typically performed using an application program interface (API) that provides a standardized software interface that can be run on multiple platforms, operating systems, and hardware. Examples of graphics APIs include the Open Graphics Library (OpenGL), Direct 3D (D3D), and the forthcoming DirectX10. In general, graphics APIs include a predetermined, standardized set of function calls that are interpreted by a graphics driver program and executed by a graphics processing unit (GPU) associated with the driver. For example, in a computer system that supports OpenGL, the operating system and application software programs invoke rendering functions by making calls according to OpenGL without regard for how those functions are implemented in the GPU hardware.
A general-purpose GPU (GPGPU) is a GPU that can be used to perform general-purpose computations in addition to or instead of the usual rendering operations. A GPGPU can be created by defining a library of computational function calls (e.g., for modeling of objects' behavior according to the laws of physics) and developing a driver program capable of responding to the function calls by issuing appropriate commands to the GPU. For example, a GPGPU can be used to execute a physics pass and a rendering pass to generate an image. In the physics pass, the GPGPU driver receives function calls related to physics computations from an application. The physics computations may be used to model the movement and interaction of objects to be rendered (e.g., falling bodies, collisions, rigid body physics, etc.). The GPGPU driver operates the GPU to apply the specified physics computations to the input and manages the output, e.g., by delivering output data representing the various objects as input to a rendering pipeline of the GPGPU. In the rendering pass, the output data from the physics computations is used to render an image to a frame buffer for display. The workflow repeats for each subsequent frame. The physics pass and the rendering pass are executed sequentially on the same GPGPU.
Using a GPGPU for physics computations has the advantage that the high degree of parallel processing available in a GPGPU allows physics computations to be performed in parallel on many objects. The resulting physics throughput of a GPGPU is thus higher than the corresponding throughput of a CPU. However, for real-time animation (which requires new frames at a rate of ˜30 Hz to achieve realistic smoothness), the additional burden of physics computation in the GPGPU reduces the time available for rendering operations. It would therefore be desirable to provide systems with high throughput for physics computations in which the physics computations do not compete with rendering operations for GPU resources.